# Copyright (c) 2021-2025  libbylg@126.com
# str is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#          http://license.coscl.org.cn/MulanPSL2
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR
# FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
cmake_minimum_required(VERSION 3.24)
project(str_test LANGUAGES CXX)

#   Import quality configuration
include(${CMAKE_SOURCE_DIR}/cmake/quality.cmake)

#   Add major source
list(APPEND SOURCES ${CMAKE_SOURCE_DIR}/include/str.hpp)
list(APPEND SOURCES ${CMAKE_SOURCE_DIR}/src/str.cpp)
list(APPEND INCPATH ${CMAKE_SOURCE_DIR}/include)
list(APPEND INCPATH ${CMAKE_SOURCE_DIR}/src)

#   Add testing library
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/testing.hpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/testing.cpp)

#   Add all testing files
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_accept.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_accept_until.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_align_center.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_align_center_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_align_left.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_align_left_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_align_right.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_align_right_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_align_zfill.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_align_zfill_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_all_demos.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_all_from_customers.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_append.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_append_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_chunked.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_chunked_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_contains.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_count.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_count_lines.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_count_words.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_cover.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_cover_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_decode_base16.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_decode_base16_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_decode_base64.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_decode_base64_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_decode_cstr.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_decode_cstr_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_dirname.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_dirname_basename.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_dirname_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_dirname_pos.cpp)
#list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_dirname_ptr.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_dirname_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_dirname_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_drop.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_drop_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_drop_left.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_drop_left_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_drop_left_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_drop_right.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_drop_right_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_drop_right_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_dump_hex.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_encode_base16.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_encode_base16_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_encode_base64.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_encode_base64_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_encode_cstr.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_encode_cstr_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_ends_with.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_ends_with_eol.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_ends_with_spaces.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_ends_with_word.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_eol_suffix.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_expand_envs.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_expand_envs_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_expand_tabs.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_expand_tabs_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_expand_user.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_expand_user_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_extname.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_extname_pos.cpp)
#list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_extname_ptr.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_extname_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_extname_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_foreach_lines.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_foreach_words.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_has_any_one.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_has_eol_suffix.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_has_prefix.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_has_suffix.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_icompare.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_icontains.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_iequals.cpp)
#list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_insert.cpp)
#list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_insert_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_invert.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_all_in.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_alnum.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_alnumul.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_alpha.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_ascii.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_blank.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_capitalize.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_digit.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_graph.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_identifier.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_literal_bool.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_literal_false.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_literal_integer.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_literal_real.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_literal_true.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_lower.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_print.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_space.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_space_or_empty.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_title.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_upper.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_is_xdigit.cpp)
#list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_iter_next_string.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_iwildcmp.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_join.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_join_lines.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_join_list.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_join_map.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_join_path.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_join_searchpath.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_make_spaces.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_make_spaces_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_char.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_chunk.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_chunk_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_chunk_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_eol.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_eol_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_eol_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_opt1.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_opt2.cpp)
#list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_regex.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_spaces.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_spaces_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_spaces_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_string.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_string_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_string_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_window.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_window_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_window_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_word.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_word_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_next_word_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_normpath.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_normpath_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_partition.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_partition_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_partition_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prefix.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prepend.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prepend_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_char.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_eol.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_eol_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_eol_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_spaces.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_spaces_pos.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_spaces_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_spaces_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_string.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_string_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_string_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_word.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_word_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_prev_word_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_rawname.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_rawname_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_rawname_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_read_all.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_read_lines.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_read_next_line.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_remove_eol_suffix.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_remove_eol_suffix_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_remove_eol_suffix_range.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_remove_eol_suffix_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_remove_prefix.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_remove_prefix_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_remove_prefix_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_remove_suffix.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_remove_suffix_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_remove_suffix_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_repeat.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_simplified.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_simplified_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_simplified_integer.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_simplified_integer_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_skip_spaces.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_skip_n.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_skip_max.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_space.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_lines.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_lines_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_list.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_list_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_map.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_pair.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_pair_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_path.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_path_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_searchpath.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_searchpath_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_split_words.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_starts_with.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_starts_with_margin.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_starts_with_spaces.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_starts_with_word.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_suffix.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_surround.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_surround_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_swap_case.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_take.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_take_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_take_left.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_take_left_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_take_left_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_take_right.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_take_right_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_take_right_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_take_view.cpp)
#list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_title.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_to_capitalize.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_to_capitalize_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_to_lower.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_to_title.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_to_upper.cpp)
#list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_translate_invert.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_anywhere.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_anywhere_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_left.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_left_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_left_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_right.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_right_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_right_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_surrounding.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_surrounding_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_trim_surrounding_view.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_unsurround.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_unsurround_inplace.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_wildcmp.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_windowed.cpp)
list(APPEND SOURCES ${CMAKE_CURRENT_LIST_DIR}/test_str_windowed_view.cpp)

#   Add unit-testing target
add_executable(tests ${SOURCES})
target_include_directories(tests PRIVATE ${INCPATH})
target_compile_options(tests PRIVATE ${QUALITY_OPTIONS})

#   Add fake target for: make test
add_custom_target(test COMMAND tests)
add_dependencies(test tests)
